Django এর বিল্ট-ইন Test Framework ব্যবহার করে আপনি আপনার Django অ্যাপ্লিকেশনগুলোকে পরীক্ষা (Test) করতে পারেন। এটি unit testing এবং integration testing এর জন্য শক্তিশালী এবং সহজলভ্য টুল সরবরাহ করে, যার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের ফিচারগুলো, মডেল, ভিউ এবং ফর্ম ইত্যাদি পরীক্ষা করতে পারেন। Django এর টেস্টিং ফ্রেমওয়ার্ক Python এর unittest মডিউলের উপর ভিত্তি করে তৈরি, তবে এটি Django এর সাথে ইন্টিগ্রেটেড এবং Django অ্যাপ্লিকেশন পরীক্ষার জন্য কাস্টমাইজড কিছু ফিচার প্রদান করে।
Django Test Framework এর মূল উপাদান
১. TestCase ক্লাস
Django এর টেস্ট ফ্রেমওয়ার্কে পরীক্ষা করতে হলে আপনাকে django.test.TestCase ক্লাস ব্যবহার করতে হবে। এটি একটি বিশেষ unit test ক্লাস যা আপনার টেস্টগুলোকে পরিচালনা করতে সহায়তা করে।
TestCase ক্লাস ব্যবহার করে, আপনি প্রতিটি ভিউ বা মডেলের জন্য একটি টেস্ট ফাংশন তৈরি করতে পারেন। Django এর TestCase ক্লাস ডাটাবেসের সাথে কাজ করার সময় মক ডাটাবেস তৈরি করে, ফলে প্রকৃত ডাটাবেসে কোন পরিবর্তন না করেই টেস্ট করা যায়।
২. TestCase ক্লাসের উদাহরণ
from django.test import TestCase
from django.urls import reverse
from .models import Post
class PostModelTest(TestCase):
def test_create_post(self):
# একটি পোস্ট তৈরি করা
post = Post.objects.create(title='Test Post', content='This is a test post.')
# পোস্টটি ডাটাবেসে সঠিকভাবে সংরক্ষিত হয়েছে কিনা পরীক্ষা করা
self.assertEqual(post.title, 'Test Post')
self.assertEqual(post.content, 'This is a test post.')
class PostViewTest(TestCase):
def test_post_list_view(self):
# প্রথমে কিছু পোস্ট তৈরি করুন
Post.objects.create(title='Test Post 1', content='Content 1')
Post.objects.create(title='Test Post 2', content='Content 2')
# তারপর পোস্ট লিস্ট ভিউ টেস্ট করা
url = reverse('post_list') # URL যেটি টেস্ট করা হবে
response = self.client.get(url)
# সফল HTTP রেসপন্স পাওয়া কিনা পরীক্ষা করা
self.assertEqual(response.status_code, 200)
# পোস্টগুলির শিরোনাম টেমপ্লেটে সঠিকভাবে রয়েছে কিনা পরীক্ষা করা
self.assertContains(response, 'Test Post 1')
self.assertContains(response, 'Test Post 2')
এখানে:
test_create_post: এটি একটি unit test, যা নতুন পোস্ট তৈরি করার জন্য মডেল টেস্ট করছে।test_post_list_view: এটি একটি integration test, যা একটি ভিউয়ের মাধ্যমে ডেটা লোড এবং প্রদর্শন করার প্রক্রিয়া পরীক্ষা করছে।
৩. setUp এবং tearDown মেথড
Django এর TestCase ক্লাসে আপনি setUp এবং tearDown মেথডগুলোও ব্যবহার করতে পারেন। setUp মেথডটি টেস্ট শুরুর আগে চালিত হয় এবং tearDown মেথডটি টেস্ট শেষ হওয়ার পর চালিত হয়। এগুলোর মাধ্যমে আপনি টেস্ট চলাকালীন যেকোনো প্রস্তুতি বা পরিস্কারকরণ কাজ করতে পারেন।
from django.test import TestCase
class MyTestCase(TestCase):
def setUp(self):
# টেস্টের জন্য ডাটাবেসে ডাটা তৈরি করা
self.user = User.objects.create_user(username='testuser', password='password')
def test_user_created(self):
# নিশ্চিত করা যে ব্যবহারকারী ডাটাবেসে তৈরি হয়েছে
self.assertEqual(self.user.username, 'testuser')
def tearDown(self):
# টেস্ট শেষে ডাটাবেস ক্লিনআপ
self.user.delete()
এখানে:
setUp: টেস্ট শুরুর আগে একটি নতুন ব্যবহারকারী তৈরি করা হয়েছে।tearDown: টেস্ট শেষে সেই ব্যবহারকারী ডিলিট করা হয়েছে।
৪. Django টেস্ট ক্লায়েন্ট
Django এর Test Client এর মাধ্যমে আপনি HTTP রিকোয়েস্টগুলো করতে পারেন এবং সেগুলোর রেসপন্স চেক করতে পারেন। এটি খুবই উপকারী যখন আপনি ভিউ বা API রেসপন্স টেস্ট করছেন।
from django.test import TestCase
from django.urls import reverse
class PostViewTest(TestCase):
def test_post_list_view(self):
# পোস্ট লিস্ট ভিউতে GET রিকোয়েস্ট করা
response = self.client.get(reverse('post_list'))
# রেসপন্সের HTTP স্ট্যাটাস কোড চেক করা
self.assertEqual(response.status_code, 200)
এখানে self.client.get() এর মাধ্যমে একটি GET রিকোয়েস্ট করা হচ্ছে এবং তার রেসপন্সের স্ট্যাটাস কোড যাচাই করা হচ্ছে।
৫. Django মডেল টেস্টিং
Django এর মডেল টেস্টিং অত্যন্ত গুরুত্বপূর্ণ। এটি আপনার মডেল ফিল্ডের বৈধতা, ফর্মের কাস্টম লজিক, মডেল মেথড এবং মডেল রিলেশনস চেক করার জন্য ব্যবহৃত হয়।
from django.test import TestCase
from .models import Post
class PostModelTest(TestCase):
def test_title_is_required(self):
# শিরোনাম ছাড়া পোস্ট তৈরি করা
post = Post.objects.create(content='Test content')
# নিশ্চিত করা যে, শিরোনাম ফিল্ড শূন্য না হবে
self.assertRaises(ValueError, post.save)
এখানে:
test_title_is_required: এটি একটি টেস্ট যা নিশ্চিত করে যে শিরোনাম ফিল্ড শূন্য রেখে পোস্ট সেভ করা যাবে না।
৬. Django টেস্ট রান করা
টেস্টগুলো রান করতে Django এর manage.py কমান্ড ব্যবহার করতে হবে।
টেস্ট রান করার জন্য:
python manage.py test
এটি আপনার সব টেস্ট ফাইল খুঁজে বের করবে এবং সেগুলো রান করবে। সফল হলে OK বার্তা দেখাবে, আর কোনো ত্রুটি থাকলে তা বিস্তারিতভাবে দেখাবে।
সারাংশ
Django এর টেস্ট ফ্রেমওয়ার্ক সহজেই আপনার অ্যাপ্লিকেশনগুলোর ইউনিট এবং ইন্টিগ্রেশন টেস্ট পরিচালনা করতে সহায়তা করে। TestCase ক্লাস, Test Client, setUp এবং tearDown মেথড ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশন টেস্ট করতে পারেন এবং তার কার্যকারিতা নিশ্চিত করতে পারেন। Django এর বিল্ট-ইন টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি উন্নত কোড মান এবং বাগ মুক্ত অ্যাপ্লিকেশন তৈরি করতে পারেন।
Read more